<?php
require_once $_SERVER['DOCUMENT_ROOT']."/crc/geral/uteis/imports.php";
require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/dao/iDispositivoDao.php";
//evitarAcessoExterno(getDescricaoArquivo(),ARQUIVO);

/**
 * Enter description here ...
 * @author Heitor Felipe
 *
 */
class DispositivoDao implements iDispositivoDao{

	public function inserirDispositivo(Dispositivo $dispositivo){
		global $banco;
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/banco/conexao.php";

		//Recuperando proximo id do dispositivo

		$sql = "select max(id_dispositivo)+1 as \"id_dispositivo\" from tb_dispositivo where id_casa = ".$dispositivo->getCasa()->getIdCasa().";";

		$rs = $banco->RodarQuery($sql);
		$linha = $banco->RetornaLinha($rs);
		$id_dispositivo = $linha->id_dispositivo;
		
		$id_dispositivo = ($id_dispositivo <= 0)?0:$id_dispositivo;

		$sql = "INSERT INTO tb_dispositivo(id_dispositivo,
										id_casa, 
										descricao, 
										status,
										qtd_portas)
            		    		VALUES (".$id_dispositivo.",
            		    				".$dispositivo->getCasa()->getIdCasa().", 
            		    				'".$dispositivo->getDescricao()."',
            		    				'".$dispositivo->getStatus()."',
            		    				".$dispositivo->getQtdPortas().")";
		return $banco->ExecQuery($sql);
	}

	public function listarTodosDispositivos($inicio,$fim,$limite,$campo,$valor){
		global $banco;
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/banco/conexao.php";
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/modelo/Dispositivo.php";
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/dao/CasaDao.php";


		$dispositivos = array();


			
		$sql = "SELECT d.id_dispositivo,d.descricao,d.status,d.id_casa,d.qtd_portas
				FROM tb_dispositivo d 
				INNER JOIN tb_casa c ON d.id_casa = c.id_casa";

		if($campo != "" && $valor != ""){
			$sql .= " AND d.$campo ilike '%$valor%' ";
		}

		$sql .= " ORDER BY d.id_dispositivo ASC";

		if($limite){
			($fim == "")?$fim = '10':"";
			($inicio == "")?$inicio = '0':"";
				
			$sql .= " LIMIT $fim OFFSET $inicio ";
		}

		$rs = $banco->RodarQuery($sql);

		while($linha = $banco->RetornaArray($rs)){
			$dispositivo = new Dispositivo();
				
			$dispositivo->setIdDispositivo($linha["id_dispositivo"]);
			$dispositivo->setDescricao(utf8_decode($linha["descricao"]));
			$dispositivo->setStatus($linha["status"]);
			$dispositivo->setQtdPortas($linha["qtd_portas"]);
				
			//Carregando a casa do dispositivo
			$casaDao = new CasaDao();
			$dispositivo->setCasa($casaDao->carregarCasa($linha["id_casa"]));

			array_push($dispositivos, $dispositivo);
		}

		return $dispositivos;
	}
	
	public function listarDispositivosPorCasaFlex($idCasa,$inicio,$fim,$limite,$campo,$valor){
		global $banco;
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/banco/conexao.php";
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/modelo/Dispositivo.php";
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/dao/CasaDao.php";


		$dispositivos = array();


			
		$sql = "SELECT d.id_dispositivo,d.descricao,d.status,d.id_casa,d.qtd_portas
				FROM tb_dispositivo d 
				INNER JOIN tb_casa c ON d.id_casa = c.id_casa
				WHERE d.id_casa = $idCasa";

		if($campo != "" && $valor != ""){
			$sql .= " AND d.$campo ilike '%$valor%' ";
		}

		$sql .= " ORDER BY d.id_dispositivo ASC";

		if($limite){
			($fim == "")?$fim = '10':"";
			($inicio == "")?$inicio = '0':"";
				
			$sql .= " LIMIT $fim OFFSET $inicio ";
		}

		$rs = $banco->RodarQuery($sql);

		while($linha = $banco->RetornaArray($rs)){
			$dispositivo = new Dispositivo();
				
			$dispositivo->setIdDispositivo($linha["id_dispositivo"]);
			$dispositivo->setDescricao(utf8_decode($linha["descricao"]));
			$dispositivo->setStatus($linha["status"]);
			$dispositivo->setQtdPortas($linha["qtd_portas"]);
				
			//Carregando a casa do dispositivo
			$casaDao = new CasaDao();
			$dispositivo->setCasa($casaDao->carregarCasa($linha["id_casa"]));

			array_push($dispositivos, $dispositivo);
		}

		return $dispositivos;
	}

	public function listarDispositivosPorCasa($id_casa){
		global $banco;
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/banco/conexao.php";
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/modelo/Dispositivo.php";

		$dispositivos = array();

		$sql = "SELECT d.id_dispositivo,d.descricao,d.status,d.qtd_portas
				FROM tb_dispositivo d 
				INNER JOIN tb_casa c ON d.id_casa = c.id_casa
				WHERE c.id_casa = $id_casa ORDER BY d.descricao ASC";

		
		
		
		$rs = $banco->RodarQuery($sql);

		while($linha = $banco->RetornaArray($rs)){
			$dispositivo = new Dispositivo();
				
			$dispositivo->setIdDispositivo($linha["id_dispositivo"]);
			$dispositivo->setDescricao(utf8_decode($linha["descricao"]));
			$dispositivo->setStatus($linha["status"]);
			$dispositivo->setQtdPortas($linha["qtd_portas"]);
				
			array_push($dispositivos, $dispositivo);
		}

		return $dispositivos;

	}

	public function listarDispositivosPorUsuario($id_usuario,$inicio,$fim,$limite,$campo,$valor){
		global $banco;
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/banco/conexao.php";
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/modelo/Dispositivo.php";

		$dispositivos = array();


			
		$sql = "SELECT d.id_dispositivo,d.descricao,d.status,d.qtd_portas
				FROM tb_dispositivo d 
				INNER JOIN tb_casa c ON d.id_casa = c.id_casa
				INNER JOIN tb_usuario u ON u.id_usuario = c.id_usuario
				WHERE u.id_usuario = $id_usuario";

		if($campo != "" && $valor != ""){
			$sql .= " AND d.$campo ilike '%$valor%' ";
		}

		$sql .= " ORDER BY d.id_dispositivo ASC";

		if($limite){
			($fim == "")?$fim = '10':"";
			($inicio == "")?$inicio = '0':"";
				
			$sql .= " LIMIT $fim OFFSET $inicio ";
		}

		$rs = $banco->RodarQuery($sql);

		while($linha = $banco->RetornaArray($rs)){
			$dispositivo = new Dispositivo();
				
			$dispositivo->setIdDispositivo($linha["id_dispositivo"]);
			$dispositivo->setDescricao(utf8_decode($linha["descricao"]));
			$dispositivo->setStatus($linha["status"]);
			$dispositivo->setQtdPortas($linha["qtd_portas"]);

			//falta implementar o metodo que retorna a casa para poder carregar o objeto casa e adicionar ao dispositivo

			array_push($dispositivos, $dispositivo);
		}

		return $dispositivos;

	}

	public function carregarDispositivo($id_dispositivo, $id_casa){
		global $banco;
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/banco/conexao.php";
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/modelo/Dispositivo.php";
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/dao/CasaDao.php";

		$sql = "SELECT * FROM tb_dispositivo WHERE id_casa = '$id_casa' and id_dispositivo = '$id_dispositivo'" ;

		$rs = $banco->RodarQuery($sql);

		$dispositivo = new Dispositivo();

		if($banco->TotalRegistros($rs) > 0){
			$linha = $banco->RetornaArray($rs);
				
			$dispositivo->setDescricao($linha["descricao"]);
			$dispositivo->setStatus($linha["status"]);
			$dispositivo->setIdDispositivo($linha["id_dispositivo"]);
			$dispositivo->setQtdPortas($linha["qtd_portas"]);
				
			$casaDao = new CasaDao();
			$dispositivo->setCasa($casaDao->consultarCasaPorID($linha["id_casa"]));
				
		}

		return $dispositivo;
	}


	public function excluirDispositivo ($id){
		global $banco;
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/banco/conexao.php";

		$sql = "DELETE FROM tb_dispositivo WHERE id_dispositivo = '$id' ";

		return $banco->ExecQuery($sql);
	}



	public function alterarDispositivo (Dispositivo $dispositivo){
		global $banco;
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/banco/conexao.php";

		$sql = "UPDATE tb_dispositivo
				SET descricao 	= '".$dispositivo->getDescricao()."', 
					status 		= '".$dispositivo->getStatus()."',
					qtd_portas  = ".$dispositivo->getQtdPortas()."
				WHERE id_dispositivo = ".$dispositivo->getIdDispositivo()."
					AND id_casa = ".$dispositivo->getCasa()->getIdCasa().";";
		
		return $banco->ExecQuery($sql);
	}

	public function desativarDispositivo($id_dispositivo){
		global $banco;
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/banco/conexao.php";

		$sql = "update tb_dispositivo set status = 'I' where id_dispositivo = $id_dispositivo";

		return $banco->ExecQuery($sql);
	}

	public function consultarDispositivoPorID ($id_dispositivo,$id_casa){
		global $banco;
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/banco/conexao.php";
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/persistencia/dao/CasaDao.php";
		require_once $_SERVER['DOCUMENT_ROOT']."/crc/modelo/Dispositivo.php";

		$sql = "SELECT d.id_dispositivo,d.id_casa,d.descricao,d.status,d.qtd_portas
					FROM tb_dispositivo d 
						INNER JOIN tb_casa c ON c.id_casa = d.id_casa
					WHERE d.id_dispositivo = $id_dispositivo and d.id_casa = $id_casa";

		$rs = $banco->RodarQuery($sql);

		$dispositivo = new Dispositivo();

		if($banco->TotalRegistros($rs) > 0){

			$linha = $banco->RetornaArray($rs);
				
				
				
			$casaDao = new CasaDao();
			$dispositivo->setCasa($casaDao->carregarCasa($linha["id_casa"]));
				
				
			$dispositivo->setDescricao(utf8_decode($linha["descricao"]));
			$dispositivo->setStatus($linha["status"]);
			$dispositivo->setIdDispositivo($linha["id_dispositivo"]);
			$dispositivo->setQtdPortas($linha["qtd_portas"]);
		}

		return $dispositivo;
	}


}
?>